/**
 * @description 支持分页。支持有限布局方式 ,仅支持动态数据源，如需静态数据源，可使用CollectionPart
 * 
 */
Rsd.define('Rsd.hermit.sections.PagingCollectionPart', {
    extend: 'Rsd.control.List',
    requires: [],
    xtype: 'paging-collection',
     /**
     * @description 标识该组件是否允许编辑
     */
    domEditable:true, 
     /**
     * @description true:表示只允许在模板中修改
     */
    editInMaster:false,
    height: 300, 
    width:'100%', 
    layout:'hbox',
    /**
     * 
     */
    itemStyle:{
        justifyContent: 'center'
    },
    /**
     * @description 列数量，0表示自适应
     */
    columnCount:2,  
    /**
     * 
     */
    schema:{
        type:'object',
        title:'集合控件',
        for:'dataSource',
        properties:{ 
            api:
            {
                type:'string',
                title:'数据源API',
                default:''
            },
            where:{
                type:'array',
                title:'筛选条件',
                default:[]
            },
            sort:{
                type:'array',
                title:'排序条件',
                default:[]
            },
            pageIndex:
            {
                type:'number',
                title:'页号',
                minimum:10,
                maximum:50,
                default:20
            },
            pageSize:
            {
                type:'number',
                title:'分页大小',
                minimum:10,
                maximum:50,
                default:20
            }
        }
    },
    /**
     * @description 支持动态数据源,动态数据源，元素不可修改
     */
    dataSource:{api:''},
    /*
     * */
    constructor: function PagingCollectionPart(config) {
        config = config || {};
        Rsd.apply(this, config);
        
        if(this.columnCount > 0)
        {
            this.itemStyle = this.itemStyle||{};
            this.itemStyle.width = (100/this.columnCount) + '%';
        }
        
    },
     /**
     @public
     @description 加载dataSource到控件上；
     @description 1、dataSource 是数组对象,直接将数组元素作为config 传给item 控件
     @description 2、dataSource 是Rsd.data.Store，将查询返回的对象作为config.data的值 传给item 控件
     @description 3、dataSource 是Rsd.data.Service，将查询返回的对象作为config.data的值 传给item 控件
     * */
    loadData:function loadData(args) {
 
        var _data = args||this.dataSource;
        //this.log(_data);
        if(Rsd.isEmpty(_data))
        { 
            return this;
        }
       
        var me = this;
        //数据源 为数组
        if(Rsd.isArray(_data))
        {  
            //this.log('dataSource is array',_data); 
            this.callParent(_data); 
            return this;
        }  

        if(_data instanceof String)
        { 
           //this.log('dataSource is string',this.dataSource); 
           this.dataSource = {api:_data};
        }
  
        //数据源为 Rsd.data.Service
        if(Rsd.isObject(this.dataSource)) {
            
           var service =  Rsd.app.getService(this.dataSource.api);

            var _args = Rsd.apply({}, this.dataSource.where||[]);

            service.request(_args,function loadData(resp){

                 if(!resp.hasOwnProperty('success'))
                    {
                        throw new Error('返回数据格式不正确，未找到[success]属性。');
                    }
                    if (resp.success) {
                        var _data = resp.data||resp;
                     
                        me.indexStart = _data.pagesize * _data.pageindex  + 1;
                      
                        var _rows = _data[me.dataSource.listName||'rows'];
                       
                        me.callParentFn('loadData',[_rows.map(function(item){return {data:item};})]); 
                    }
                    else
                    {
                        Rsd.alert('加载数据出现错误 ', resp.msg|| '未知错误');
                    }
               
            });

            return this; 
        }
         
        console.error('Rsd.hermit.sections.PagingCollectionPart属性dataSource不是有效值：' , _data);

        return this; 
    } 
});